const express = require('express')
const https = require('https')
const fs = require('fs')
const socketIo = require('socket.io')

// 创建 Express 应用
const app = express()

// 配置 SSL 证书（可自签名）
// 生成自签名证书 openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
const options = {
  key: fs.readFileSync('./ssl/key.pem'),
  cert: fs.readFileSync('./ssl/cert.pem')
};


const server = https.createServer(options,app)

// 设置静态文件目录
app.use(express.static('public'))

// 关键配置：添加 CORS 支持
// const io = socketIo(server, {
//   cors: {
//     origin: "http://127.0.0.1:5500", // 必须和 Live Server 的地址一致
//     methods: ["GET", "POST"],
//     credentials: true // 如果需要 cookies/认证，就设为 true
//   }
// })
const io = socketIo(server)

io.sockets.on('connection', socket => {
    socket.on('message',(room,data) => {
        console.log('---message---',room,data)
        // 给除了自己的客户端（对端）发消息
        socket.to(room).emit('message',room,data)
    })

    socket.on('join',room=> {
        console.log('---join room---',room,socket.id)

        socket.join(room)

        var myRoom = io.sockets.adapter.rooms.get(room)
        var users = myRoom ? myRoom.size : 0
        if (users < 3) {
            // 通知自己
            socket.emit('joined', room, socket.id)

            if (users >  1) {
                // 发送给除了自己的其它客户端
                socket.to(room).emit('otherjoin',room,socket.id)
            }
        } else {
            socket.leave(room)
            socket.emit('full',room,socket.id)
        }
    })

    socket.on('leave', (room,socketId) => {
        console.log('---leave---',room,socketId)

        socket.leave(room)

        // 发送给除了自己的其它客户端
        socket.to(room).emit('bye',room,socket.id)
        socket.emit('leaved', room, socket.id)
    })
})

// 启动服务器
const PORT = process.env.PORT || 3000
server.listen(PORT, () => {
    console.log(`服务器运行在 ${PORT} 端口`)
})